package com.tjetc.config;

import jakarta.servlet.*;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/**
 * 替代我们web.xml文件中的内容
 *
 *
 * @author gaoyongxiang
 * @version v1.0
 * @date 2025/9/8
 */
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    // 这个是初始化Spring使用
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[0];
    }

    // 这个是初始化SpringMVC容器
    @Override
    protected Class<?>[] getServletConfigClasses() {
//        return new Class[0];
        return new Class[]{WebConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        // 配置dispatch的拦截配置
        return new String[]{"/"};
    }

    // 配置我们的过滤器
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("utf-8");
        characterEncodingFilter.setForceRequestEncoding(true);
        characterEncodingFilter.setForceResponseEncoding(true);
        return super.getServletFilters();
    }


    // 关键：覆盖此方法配置 Multipart
    @Override
    protected void customizeRegistration(ServletRegistration.Dynamic registration) {
        // 配置 MultipartConfigElement
        MultipartConfigElement multipartConfig = new MultipartConfigElement(
                "",    // 临时文件存储位置 当超过内存时，将会保存到一个临时目录
                10 * 1024 * 1024, // 最大文件大小 (10MB)
                20 * 1024 * 1024, // 最大请求大小 (20MB)
                512 * 1024        // 文件大小阈值，超过此值会写入磁盘 (512KB)
        );
        registration.setMultipartConfig(multipartConfig);

        // 设置启动时加载
        registration.setLoadOnStartup(1);
    }



}